Upload and download bandwidth differ in many information distribution systems. When a user wants to use a mobile device to retrieve a video stream from his or her home or residential network via a public network, or more generally to transport data to a target terminal from a source terminal of a network, this may have the effect that the retrieval is bottlenecked in the network at the side of the source terminal, even though the target terminal, such as the mobile device, has more severe computational limitations than devices in the home or residential network.
This bottleneck is lessened when use is made of distributed uploading from a plurality of source terminals, each of which having its own connection to the network. For this purpose, a user may store respective data parts from a data object at different source terminals in advance of the desired transport. When transport of the data object to the target terminal is requested, commands can be sent to the source terminals that store the different data parts to make each source terminal transmit its data part to the target terminal via the network via its own connection. To keep the source terminals from obtaining access to the data object, it may be desirable to encrypt the data parts for this purpose. But if the user of the target terminal supplies the data parts only to trusted source terminals, e.g. source terminals of friends that may share access to the data object, this may not be needed.
However, this makes the retrieval dependent on the joint availability of all of the source terminals. Additional measures are needed when this cannot be guaranteed. When it is known in advance that a particular source terminal will not be available, a replacement terminal may be designated that may be used instead and a copy of the data part from the particular source terminal may be stored at its replacement terminal. This may make it necessary to use encryption when the data part is copied to an untrusted replacement terminal. Source terminals of friends may be obligated to apply encryption when the data part is copied to an untrusted source terminal for this purpose.
The requirement of joint availability can also be relaxed by avoiding the need for a predetermined fixed set of source terminals. This can be addressed by redundancy techniques known from RAID systems (Redundant Array of Independent Disks). In its simplest form this involves storing copies of the same data part at different terminals and attempting to retrieve the data parts from all terminals. But a more efficient solution is to store the data parts by means of a redundant code. For example, conventional error correcting codes use a set of code words that each are built from a number of symbols, in such a way that the codeword can be inferred even if a number of the symbols from the codeword is missing. In a systematic code, this is done by constructing the codeword from information symbols that must be encoded with added symbols that are computed from the information symbols.
For distributed uploading the data parts of the data object may be treated as information symbols from which the symbols of a codeword are constructed and the symbols from the codeword may be stored at different source terminals. This enables the target terminal to reconstruct the information symbols even if a number of source terminals fails to provide information.
Unfortunately, reconstruction from incomplete code words from a redundant code is a computationally intensive task when a storage-efficient code with large code words is used. This task may be beyond the capacity of simple target terminals such as mobile devices. Therefore, it is desirable to perform this task at a network node upstream from the target terminal, but downstream from the source terminals.
Use of designated replacement terminals and use of a redundant code may be combined to make data transport even more robust. However, this creates a problem when encryption is used to keep untrusted source terminals from access to their data part. In this case, and when uploading from the target terminal is avoided, a need to perform decryption before decoding according to the redundant code would force the target terminal to perform both decryption and decoding.